//
//  UserAccount.swift
//  weibobo
//
//  Created by 丁超人 on 16/2/26.
//  Copyright © 2016年 丁超人. All rights reserved.
//

import UIKit

/// 用户账户key
private let DCWeiboUserAccountKey = "DCWeiboUserAccountKey"

class UserAccount: NSObject {

    // 用户账户单例 ，全局入口
    static let sharedUserAccount = UserAccount()
    
    /// 用户账户登录标记
    var isLogin: Bool {
    return access_token != nil
    
    }
    
    ///用于调用access_token，接口获取授权后的access token
    var access_token: String?
    //access_token的生命周期，单位是秒数 string
    // 在设置expires_in 属性的同时 计算出过期日期
    var expires_in: NSTimeInterval = 0 {
        didSet {
        // 计算过期日期
            expiresDate = NSDate(timeIntervalSinceNow: expires_in)
        
        }
    
    }
    // 过期日期
    var expiresDate: NSDate?
    //当前授权用户的UID。
    var uid: String?
    // 用户昵称
    var screen_name: String?
    // 用户头像地址（大图），180×180像素
    var avatar_large: String?
    
    // MARK:-构造函数
    // 如果在init 前增加private 修饰符 可以限制外界通过（）直接创建对象
    private override init() {
        super.init()
        loadUserAccount()
    }
    
    
    init(dict:[String: AnyObject]) {
        super.init()
        // 字典转模型
        setValuesForKeysWithDictionary(dict)
    }
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    // 类似于 Java 的 toString 
    // ios 没有硬性要求 建议“模型类”一定要重写
   override var description: String {
        // 模型转字典
    let keys = ["access_token","uid","expires_in","expiresDate","screen_name","avatar_large"]
        return dictionaryWithValuesForKeys(keys).description
    
    }
}
// MARK:- 加载保存用户账户
extension UserAccount {

    
    //使用字典更新 模型 数据
    func updateUserAccount(dict: [String: AnyObject]) {
    setValuesForKeysWithDictionary(dict)
        
        saveUserAccount()
    
    }
    
    // 将当前用户“账户” 保存在用户偏好
    
    private func saveUserAccount() {
    
    // 1 模型转字典
        let keys = ["access_token","uid","expiresDate","screen_name","avatar_large"]
        let dict = dictionaryWithValuesForKeys(keys)
        
        // 2 将字典写入偏好
        NSUserDefaults.standardUserDefaults().setObject(dict, forKey: DCWeiboUserAccountKey)
        print(NSHomeDirectory())
    
    }

    /// 加载用户账户
    private func loadUserAccount() {
    
    // 1 从用户偏好加载
        guard let dict = NSUserDefaults.standardUserDefaults().objectForKey(DCWeiboUserAccountKey) as? [String: AnyObject] else {
        return
        }
    // 2 字典转模型
        setValuesForKeysWithDictionary(dict)
    
    // 3 判断是否过期，如果过期 将token值设为nil
        if isExpired {
        print("token 已经过期")
        access_token = nil
        }else{
        print("token 正常")
        }
    }
    
    /// 判断是否过期
    private var isExpired: Bool {
    return expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedAscending
    
    }
}






